<?php
/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2 textwidth=150 number: */

/**
 * Controlador padrão para uma aplicação do Cake.
 *
 * ...
 *
 * PHP versão 5
 *
 * LICENÇA: Este arquivo fonte esta sob o termos da licença MIT.
 *
 * @package   scuf.controller
 * @author    Rodrigo Casara <rodrigocasara@gmail.com>
 * @copyright 2012 Rodrigo Casara
 * @license   MIT License (http://www.opensource.org/licenses/mit-license.php)
 * @version   SVN: $Id$
 * @link
 * @since     SCUF(tm) v 1.0.0
 */

App::uses('Controller', 'Controller');
App::uses('AuthComponent', 'Controller/Component');

/**
 * Classe AppController
 *
 * Esta classe contém todos os métodos que serão herdados por todas as classes
 * controladoras da aplicação.
 *
 * @package   scuf.controller
 * @author    Rodrigo Casara <rodrigocasara@gmail.com>
 * @copyright 2012 Rodrigo Casara
 * @license   MIT License (http://www.opensource.org/licenses/mit-license.php)
 * @version   SVN: $Id$
 * @link
 * @since     SCUF(tm) v 1.0.
 */
class AppController extends Controller {

  public $components = array(
    'Session',
    'RequestHandler',
    'Auth' => array(
      'loginAction' => array('controller' => 'pessoas', 'action' => 'login'),
      //'loginRedirect' => array('controller' => 'pessoas', 'action' => 'index'),
      'loginRedirect' => 'inicio',
      'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
      'authorize' => array('Controller'),
      'authError' => 'Você não está autorizado a acessar este local.',
      'loginError' => 'O e-mail e/ou senha informados são inválidos, tente novamente.',
      'authenticate' => array(
        AuthComponent::ALL => array(
          'userModel' => 'Pessoa',
          'fields' => array(
            'username' => 'email',
            'password' => 'senha'
          )
        ),
        // Autenticação de usuários baseada no envio de dados por POST, geralmente através
        // de um formulário de login que os usuários inserem suas informações.
        'Form',
        // Autenticação de usuários usando a autenticação HTTP Basic.
        //'Basic',
        // Autenticação de usuários usando a autenticação Digest HTTP.
        //'Digest',
      ),
    )
  );

  // Cake Callbacks {{{

  /**
   * (non-PHPdoc)
   * @see Controller::beforeFilter()
   */
  public function beforeFilter() {
    $this->autoLayout = false;
    //if (!$this->RequestHandler->isAjax() && $this->name !== 'App') {
    //  echo 'Operação não permitida';
    //  $this->_stop(0);
    //}

    $browser = env('HTTP_USER_AGENT');
    if (preg_match('/MSIE/', $browser)) {
      $this->Session->setFlash('Vai criar vergonha na cara e trocar de navegador.', 'mensagens', array('classe' => 'alert'));
    }

    //Security::setHash('sha512');
    $this->Auth->allow('inicializar', 'display');
    $this->set('logged_in', $this->Auth->loggedIn());
    $this->set('usuario_logado', $this->Auth->user());
  }

  //}}}

  // Métodos do componente AuthComponent {{{

  /**
   * (non-PHPdoc)
   * @see AuthComponent::isAuthorized()
   */
  public function isAuthorized($usuario = null, $requisicao = null) {
    return true;
  }

  //}}}

  /**
   * Instacia a classe de visualização do controlador.
   * @return View Retorna a instância da classe de visualização do controlador,
   *         que também pode ser acessada pelo atributo 'View'.
   */
  protected function _instanciarClasseDeVisualizacao() {
    $viewClass = $this->viewClass;
    if ($this->viewClass != 'View') {
      list($plugin, $viewClass) = pluginSplit($viewClass, true);
      $viewClass = $viewClass . 'View';
      App::uses($viewClass, $plugin . 'View');
    }
    $View = new $viewClass($this);
    $this->View = $View;
    return $View;
  }

  /**
   * @return CakeResponse
   */
  public function inicializar($login = null) {
    $this->autoRender = false;
    $this->_instanciarClasseDeVisualizacao();
    $this->response->body($this->View->renderLayout('<div id="carregando-pagina"></div>', $this->layout));
    return $this->response;
  }

}
?>